<!DOCTYPE html>
<html lang="en">

<head>
   <meta charset="UTF-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>原型链</title>
</head>

<body>
   <script>
      /*
      问题1：实例对象身上 __proto__ 指向谁
          =>指向所属构造函数的prototype
          =>p1所属构造函数是Person
          =>p1.__proto__指向Person.prototype
       问题2：Person.prototype 的 __proto__ 指向谁 ？
          =>Person.prototype所属的构造函数是谁
          =>因为Person.prototype是一个对象数据类型(Object)
          =>在JS内所有的Object数据类型都属于Object这个内置构造函数
          =>Person.prototype是属于Object这个内置构造函数的
          =>Person.prototype的__proto__ 指向Object.prototype
       问题3：Person的__proto__指向谁？
          =>Person是一个函数，函数本身也是一个对象，就会有__proto__
          =>在JS内，所有的函数都是属于内置构造函数Function的实例
          =>Person.__proto__指向Funcion.prototype
       问题4：Object.prototype的__proto__指向谁？
          =>Object.prototype是一个对象数据类型，只要是对象，都是数据Object这个内置构造函数的
          =>Object.prototype的__proto__指向Object.prototype（死循环）
            注意：Object.prototype在JS内叫做顶级原型，不存在__proto__了
          =>Object.prototype的__proto__指向null
       问题5：Object的__proto__指向谁？
          =>Object是内一个内置构造函数，同时也是一个函数，同时也是一个对象
          =>在JS内，所有的函数都是属于内置的构造函数Function的实例
          =>Object也是Function的实例
          =>Object.__proto__指向Function.prototype
       问题6：Funcion.prototype的__proto__指向谁？
          =>Function.prototype 也是对象数据类型
          =>只要是对象数据类型都是Object的实例
          =>Function.prototype的__proto__指向Object.prototype
       问题7：Funcion的__proto__指向谁？
          =>Function也是一个内置构造函数，也是一个函数
          =>在JS内，所有的函数都是属于内置构造函数Function实例
          =>Function 自己是自己的构造函数
          =>Function 自己是自己的实例对象
          =>Function 所属构造函数的是Function
          =>Funcion的__proto__指向Funcion.prototype
          
      原型链
            +用__proto__串联起来的对象链式结构
            +注意：使用__proto__
            +每一个对象数据类型，都有一个属于自己的原型链
            +作用：为了访问对象成员

      对象访问机制  
            +当你需要访问对象的成员的时候
            +首先在自己身上查找，如果有直接使用
            +如果没有，会自动去__proto__上查找
            +如果还没有，就再去__proto__上查找
            +直到Object.prototype都没有，那么返回undefined
      */


      function Person() { }

      var p1 = new Person()

   </script>
</body>

</html>